#include<bits/stdc++.h>
using namespace std;
const int N=1500010;
int tot,k,fl=1,first[N],nnext[N<<1],to[N<<1],deg[N],vis[N];
void add(int x,int y){
	nnext[++tot]=first[x];
	first[x]=tot;
	to[tot]=y;
}
void dfs(int u,int fa,int dep,int cnt){
	if(dep==k){
		if(cnt!=1){
			fl=0;
		}
		return;
	}
	for(int e=first[u];e;e=nnext[e]){
		if(to[e]!=fa){
			dfs(to[e],u,dep+1,cnt+vis[to[e]]);
		}
	}
}
int main(){
	freopen("life.in","r",stdin);
	freopen("life.out","w",stdout);
	int n,x,y,ans=0;
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n-1;i++){
		scanf("%d%d",&x,&y);
		add(x,y);
		add(y,x);
		deg[x]++;
		deg[y]++;
	}
	for(int i=1;i<=n;i++){
		fl&=(deg[i]<=2);
	}
	if(fl){
		printf("YES\n%d",k);
		return 0;
	}
	for(int s=0;s<(1<<n);s++){
		for(int i=1;i<=n;i++){
			vis[i]=(s>>(i-1))&1;
		}
		fl=1;
		for(int i=1;i<=n;i++){
			dfs(i,0,1,vis[i]);
		}
		ans+=fl;
	}
	if(ans){
		printf("YES\n%d",ans);
	}
	else{
		printf("NO\n0");
	}
}